﻿using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using MiEmpresa.BusinessLayer;

public partial class Login : System.Web.UI.Page
{
    #region variables

    cReglasGenericas blLayer = new cReglasGenericas();
    cSeguridad secLayer = new cSeguridad();

    #endregion

    #region Eventos

    protected void Page_Load(object sender, EventArgs e)
    {
        txtUsuario.Focus();
        FormsAuthentication.Initialize();
    }

    protected void imgEntrar_Click(object sender, ImageClickEventArgs e)
    {
        LoginUsuario();
    }

    #endregion

    #region Metodos

    /// <summary>
    /// Login de usuario.
    /// </summary>
    protected void LoginUsuario()
    {
        Guid idRespuesta = Guid.Empty;
        bool bRecuerdame = chkRecuerdame.Checked;
        string sLocalizacionCookie = FormsAuthentication.FormsCookiePath;

        blLayer.Usuario = txtUsuario.Text;
        blLayer.Password = EncodingPassword(txtPassword.Text);
        idRespuesta = blLayer.LogOn();

        if (idRespuesta != Guid.Empty)
        {
            // escondemos el div de errores
            divErrorMensage.Attributes.Add("display", "none");

            // Se crea el ticket de autenticación
            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, blLayer.Usuario, DateTime.Now, DateTime.Now.AddMinutes(50), bRecuerdame, idRespuesta.ToString(), sLocalizacionCookie);

            // Se encripta la cookie para añadir más seguridad
            string hashCookies = FormsAuthentication.Encrypt(ticket);

            // Cookie encriptada
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);

            // Se añade la cookie a la respuesta
            Response.Cookies.Add(cookie);

            // Se recupera la url que el usuario trataba de acceder
            string returnUrl = Request.QueryString["ReturnUrl"];

            // si no existe dicha url redirigimos al usuario a la pagina por defecto
            if (returnUrl == null)
            {
                returnUrl = "Inicio.aspx?field=" + HttpUtility.UrlEncode(secLayer.EncriptarURL("id",idRespuesta.ToString()));
            }

            Response.Redirect(returnUrl);
        }
        {
            // Si no se valido el usuario mandamos error
            divErrorMensage.Style.Add("display", "block");
            txtUsuario.Attributes.Add("onfocusin", "select();");
            lblMensaje.Text = string.Format("Por favor verifique su usuario y contraseña e intentelo nuevamente.");
        }
    }

    /// <summary>
    /// Codificacion de password.
    /// </summary>
    /// <param name="sCadena">Cadena.</param>
    /// <returns>Cadena codificada</returns>
    protected string EncodingPassword(string sCadena)
    {
        return FormsAuthentication.HashPasswordForStoringInConfigFile(sCadena, "MD5");
    }

    /// <summary>
    /// Registro de usuario.
    /// </summary>
    protected void RegistroUsuario()
    {
        // Soy nuevo
        // Alta en base de datos
    }

    /// <summary>
    /// Metodo para cuando se olvida la contraseña.
    /// </summary>
    protected void PasswordOlvidado()
    {
        // Se me olvido mi contraseña
        // Se envia un correo
    }

    #endregion
}
